﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using TVH.Comum;
using TVH.Persistencia;
using TVH.Entidade;
using TVH.Negocio;

namespace TVH.Servicos
{
    /// <summary>
    /// Summary description for Vendas
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class Vendas : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string ListarCategoriaProduto(int idCategoriaPai)
        {
            var negocio = new Persistencia.PerCategoriaProduto();
            var categorias = negocio.ObterLista(new Entidade.CategoriaProduto() { IdCategoriaPai = idCategoriaPai });
            var retorno = categorias.Count > 15 ? categorias.GetRange(0, 15) : categorias;
            retorno.ForEach(x => x.Ordem = !x.Ordem.HasValue ? 99 : x.Ordem);
            retorno = retorno.OrderBy(x => x.Ordem.Value).ToList();
            return new JavaScriptSerializer().Serialize(retorno);
        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string ListarProdutos(int idCategoria)
        {
            var persistencia = new Persistencia.PerProduto();
            var produtos = persistencia.ObterLista(new Entidade.Produto()
            {
                IdCategoria = idCategoria
            });
            var retorno = produtos.Count > 15 ? produtos.GetRange(0, 15) : produtos;
            retorno.ForEach(x => x.Ordem = !x.Ordem.HasValue ? 99 : x.Ordem);
            retorno = retorno.OrderBy(x => x.Ordem.Value).ToList();

            return new JavaScriptSerializer().Serialize(retorno);
        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string ObterProduto(int idProduto)
        {
            var persistencia = new Persistencia.PerProduto();
            var produtos = persistencia.Obter(idProduto);
            return new JavaScriptSerializer().Serialize(produtos);
        }
        
        static Dictionary<string, Pedido> pedidos = new Dictionary<string, Pedido>();

        [WebMethod(true)]
        public string EfetuarPedido(int idProduto, int quantidade, string serial, string sessionId)
        {
            var negPedido = new NegPedido();
            var negItemPedido = new NegItemPedido();
            Pedido pedido;
            if (!pedidos.ContainsKey(serial))
            {
                pedido = negPedido.Inserir(serial);
                pedidos.Add(serial, pedido);
            }
            else
            {
                pedido = pedidos[serial]; 
            }
            negItemPedido.Inserir(pedido.Id.Value, idProduto, quantidade);
            return "True";
        }
    }
}
